1 package com.imcode.db.benchmark; 2 3 import com.imcode.db.DatabaseConnection; 4 import com.imcode.db.DatabaseConnectionWrapper; 5 import com.imcode.db.DatabaseException; 6 import com.imcode.db.JdbcDatabaseConnection; 7 import org.apache.commons.dbutils.ResultSetHandler; 8 import org.apache.commons.lang.time.StopWatch; 9 10 import java.sql.Connection; 11 12 class BenchmarkDatabaseConnection extends DatabaseConnectionWrapper { 13 14 private BenchmarkDatabase benchmarkDatabase; 15 16 BenchmarkDatabaseConnection(final BenchmarkDatabase benchmarkDatabase, final DatabaseConnection connection) { 17 super(new JdbcDatabaseConnection(connection.getConnection()) { 18 public Connection getConnection() { 19 return new BenchmarkConnection(benchmarkDatabase, connection.getConnection()); 20 } 21 }); 22 this.benchmarkDatabase = benchmarkDatabase ; 23 } 24 25 public Object executeQuery(String sqlQuery, Object[] parameters, 26 ResultSetHandler resultSetHandler) throws DatabaseException { 27 28 StopWatch stopWatch = new StopWatch(); 29 stopWatch.start(); 30 Object result = super.executeQuery(sqlQuery, parameters, resultSetHandler); 31 stopWatch.stop(); 32 long time = stopWatch.getTime(); 33 benchmarkDatabase.getAverages(sqlQuery).getTotalAverage().add(time,1); 34 return result ; 35 } 36 37 }